﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Mx.Ipn.Escom.TT20080015.Modelo.DB;
using Mx.Ipn.Escom.TT20080015.Modelo.Datos;

namespace Mx.Ipn.Escom.TT20080015.Vistas.Datos
{
    public partial class EspecialistaView : System.Web.UI.Page
    {
        /// <summary>
        /// Se verifica que el usuario tenga perfil de Administrador.
        /// Se cargan los componentes de la página.
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["user"] != null)
                if (!((Usuario)Session["user"]).Perfil.Equals("Administrador"))
                    Server.Transfer("../../vistas/control/Control.aspx", false);

            if (Context.Items.Contains("Id"))
            {
                idHiddenField.Value = Context.Items["Id"].ToString();

                try
                {
                    Usuario p = EspecialistaManager.Consultar(Convert.ToInt32(idHiddenField.Value));
                    idHiddenField.Value = p.Id.ToString();
                    tbNombre.Text = p.Nombre;
                    tbAPaterno.Text = p.APaterno;
                    tbAMaterno.Text = p.AMaterno;
                    tbUsuario.Text = p.Username;
                    tbPass.Text = p.ClaveAcceso;
                    tbCorreo.Text = p.CorreoElectronico;
                    perfilHiddenField.Value = p.Perfil;
                }
                catch (Exception ex)
                {
                    Context.Items.Add("msg", ex.Message);
                    Server.Transfer("../../vistas/control/PaginaError.aspx", false);
                }

                modificarButton.Visible = true;
                eliminarButton.Visible = true;
                claveLabel.Visible = false;
                tbPass.Visible = false;
                confirmacionLabel.Visible = false;
                tbPassConfirm.Visible = false;
            }
        }

        /// <summary>
        /// Este método se encarga de registrar un Especialista en la base de datos.
        /// </summary>
        protected void btnRegistrar_Click(object sender, EventArgs e)
        {
            Usuario v = ObtenerEspecialista();
            /*try
            {*/
                if (EspecialistaManager.Consultar(v.Username) == -1)
                {
                    EspecialistaManager.Registrar(v);
                    Context.Items.Add("msg", @"El especialista ha sido registrado. Se enviar&aacute; un e-mail a su correo la contrase&ntilde;a
                                     para que pueda tener acceso al sistema.<br />Gracias por registrarse");
                    Server.Transfer("../../vistas/control/Control.aspx", false);
                }
                else
                    mensajeLabel.Text = "El nombre de usuario o ya existe, escoja otro por favor.";
            /*}
            catch(Exception ex)
            {
                Context.Items.Add("msg", ex.Message);
                Server.Transfer("../../vistas/control/PaginaError.aspx", false);
            }*/
        }

        /// <summary>
        /// Este método realiza la actualización de los datos de un Especialista y le confirma la acción al usuario.
        /// </summary>
        protected void modificarButton_Click(object sender, EventArgs e)
        {
            try
            {
                EspecialistaManager.Actualizar(ObtenerEspecialista());
            }
            catch (Exception ex)
            {
                Context.Items.Add("msg", ex.Message);
                Server.Transfer("../../vistas/control/PaginaError.aspx", false);
            }
            Context.Items.Add("msg", "Los datos del especialista han sido actualizados");
            Server.Transfer("../../vistas/control/Control.aspx", false);
        }

        /// <summary>
        /// Este método se encarga de eliminar el Especialista seleccionado y le confirma la acción al usuario.
        /// </summary>
        protected void eliminarButton_Click(object sender, EventArgs e)
        {
            try
            {
                EspecialistaManager.Eliminar(idHiddenField.Value);
            }
            catch(Exception ex)
            {
                Context.Items.Add("msg", ex.Message);
                Server.Transfer("../../vistas/control/PaginaError.aspx", false);
            }
            Context.Items.Add("msg", "El especialista ha sido eliminado");
            Server.Transfer("../../vistas/control/Control.aspx", false);
        }

        /// <summary>
        /// Este método obtiene los datos capturados en el formulario de registro de un nuevo especialista.
        /// </summary>
        /// <returns>Un objeto Especialista</returns>
        protected Usuario ObtenerEspecialista()
        {
            return new Usuario(Convert.ToInt32(idHiddenField.Value), Util.Validar(tbNombre.Text),
                    Util.Validar(tbAPaterno.Text), Util.Validar(tbAMaterno.Text), Util.Validar(tbUsuario.Text), tbPass.Text,
                    tbCorreo.Text, perfilHiddenField.Value);
        }
    }
}
